<?php
class Text_Pinyin
{
	private static $dictionary =  array (
				  'zuo' => '-10254',
				  'zun' => '-10256',
				  'zui' => '-10260',
				  'zuan' => '-10262',
				  'zu' => '-10270',
				  'zou' => '-10274',
				  'zong' => '-10281',
				  'zi' => '-10296',
				  'zhuo' => '-10307',
				  'zhun' => '-10309',
				  'zhui' => '-10315',
				  'zhuang' => '-10322',
				  'zhuan' => '-10328',
				  'zhuai' => '-10329',
				  'zhua' => '-10331',
				  'zhu' => '-10519',
				  'zhou' => '-10533',
				  'zhong' => '-10544',
				  'zhi' => '-10587',
				  'zheng' => '-10764',
				  'zhen' => '-10780',
				  'zhe' => '-10790',
				  'zhao' => '-10800',
				  'zhang' => '-10815',
				  'zhan' => '-10832',
				  'zhai' => '-10838',
				  'zha' => '-11014',
				  'zeng' => '-11018',
				  'zen' => '-11019',
				  'zei' => '-11020',
				  'ze' => '-11024',
				  'zao' => '-11038',
				  'zang' => '-11041',
				  'zan' => '-11045',
				  'zai' => '-11052',
				  'za' => '-11055',
				  'yun' => '-11067',
				  'yue' => '-11077',
				  'yuan' => '-11097',
				  'yu' => '-11303',
				  'you' => '-11324',
				  'yong' => '-11339',
				  'yo' => '-11340',
				  'ying' => '-11358',
				  'yin' => '-11536',
				  'yi' => '-11589',
				  'ye' => '-11604',
				  'yao' => '-11781',
				  'yang' => '-11798',
				  'yan' => '-11831',
				  'ya' => '-11847',
				  'xun' => '-11861',
				  'xue' => '-11867',
				  'xuan' => '-12039',
				  'xu' => '-12058',
				  'xiu' => '-12067',
				  'xiong' => '-12074',
				  'xing' => '-12089',
				  'xin' => '-12099',
				  'xie' => '-12120',
				  'xiao' => '-12300',
				  'xiang' => '-12320',
				  'xian' => '-12346',
				  'xia' => '-12359',
				  'xi' => '-12556',
				  'wu' => '-12585',
				  'wo' => '-12594',
				  'weng' => '-12597',
				  'wen' => '-12607',
				  'wei' => '-12802',
				  'wang' => '-12812',
				  'wan' => '-12829',
				  'wai' => '-12831',
				  'wa' => '-12838',
				  'tuo' => '-12849',
				  'tun' => '-12852',
				  'tui' => '-12858',
				  'tuan' => '-12860',
				  'tu' => '-12871',
				  'tou' => '-12875',
				  'tong' => '-12888',
				  'ting' => '-13060',
				  'tie' => '-13063',
				  'tiao' => '-13068',
				  'tian' => '-13076',
				  'ti' => '-13091',
				  'teng' => '-13095',
				  'te' => '-13096',
				  'tao' => '-13107',
				  'tang' => '-13120',
				  'tan' => '-13138',
				  'tai' => '-13147',
				  'ta' => '-13318',
				  'suo' => '-13326',
				  'sun' => '-13329',
				  'sui' => '-13340',
				  'suan' => '-13343',
				  'su' => '-13356',
				  'sou' => '-13359',
				  'song' => '-13367',
				  'si' => '-13383',
				  'shuo' => '-13387',
				  'shun' => '-13391',
				  'shui' => '-13395',
				  'shuang' => '-13398',
				  'shuan' => '-13400',
				  'shuai' => '-13404',
				  'shua' => '-13406',
				  'shu' => '-13601',
				  'shou' => '-13611',
				  'shi' => '-13658',
				  'sheng' => '-13831',
				  'shen' => '-13847',
				  'she' => '-13859',
				  'shao' => '-13870',
				  'shang' => '-13878',
				  'shan' => '-13894',
				  'shai' => '-13896',
				  'sha' => '-13905',
				  'seng' => '-13906',
				  'sen' => '-13907',
				  'se' => '-13910',
				  'sao' => '-13914',
				  'sang' => '-13917',
				  'san' => '-14083',
				  'sai' => '-14087',
				  'sa' => '-14090',
				  'ruo' => '-14092',
				  'run' => '-14094',
				  'rui' => '-14097',
				  'ruan' => '-14099',
				  'ru' => '-14109',
				  'rou' => '-14112',
				  'rong' => '-14122',
				  'ri' => '-14123',
				  'reng' => '-14125',
				  'ren' => '-14135',
				  're' => '-14137',
				  'rao' => '-14140',
				  'rang' => '-14145',
				  'ran' => '-14149',
				  'qun' => '-14151',
				  'que' => '-14159',
				  'quan' => '-14170',
				  'qu' => '-14345',
				  'qiu' => '-14353',
				  'qiong' => '-14355',
				  'qing' => '-14368',
				  'qin' => '-14379',
				  'qie' => '-14384',
				  'qiao' => '-14399',
				  'qiang' => '-14407',
				  'qian' => '-14429',
				  'qia' => '-14594',
				  'qi' => '-14630',
				  'pu' => '-14645',
				  'po' => '-14654',
				  'ping' => '-14663',
				  'pin' => '-14668',
				  'pie' => '-14670',
				  'piao' => '-14674',
				  'pian' => '-14678',
				  'pi' => '-14857',
				  'peng' => '-14871',
				  'pen' => '-14873',
				  'pei' => '-14882',
				  'pao' => '-14889',
				  'pang' => '-14894',
				  'pan' => '-14902',
				  'pai' => '-14908',
				  'pa' => '-14914',
				  'ou' => '-14921',
				  'o' => '-14922',
				  'nuo' => '-14926',
				  'nue' => '-14928',
				  'nuan' => '-14929',
				  'nv' => '-14930',
				  'nu' => '-14933',
				  'nong' => '-14937',
				  'niu' => '-14941',
				  'ning' => '-15109',
				  'nin' => '-15110',
				  'nie' => '-15117',
				  'niao' => '-15119',
				  'niang' => '-15121',
				  'nian' => '-15128',
				  'ni' => '-15139',
				  'neng' => '-15140',
				  'nen' => '-15141',
				  'nei' => '-15143',
				  'ne' => '-15144',
				  'nao' => '-15149',
				  'nang' => '-15150',
				  'nan' => '-15153',
				  'nai' => '-15158',
				  'na' => '-15165',
				  'mu' => '-15180',
				  'mou' => '-15183',
				  'mo' => '-15362',
				  'miu' => '-15363',
				  'ming' => '-15369',
				  'min' => '-15375',
				  'mie' => '-15377',
				  'miao' => '-15385',
				  'mian' => '-15394',
				  'mi' => '-15408',
				  'meng' => '-15416',
				  'men' => '-15419',
				  'mei' => '-15435',
				  'me' => '-15436',
				  'mao' => '-15448',
				  'mang' => '-15454',
				  'man' => '-15625',
				  'mai' => '-15631',
				  'ma' => '-15640',
				  'luo' => '-15652',
				  'lun' => '-15659',
				  'lue' => '-15661',
				  'luan' => '-15667',
				  'lv' => '-15681',
				  'lu' => '-15701',
				  'lou' => '-15707',
				  'long' => '-15878',
				  'liu' => '-15889',
				  'ling' => '-15903',
				  'lin' => '-15915',
				  'lie' => '-15920',
				  'liao' => '-15933',
				  'liang' => '-15944',
				  'lian' => '-15958',
				  'lia' => '-15959',
				  'li' => '-16155',
				  'leng' => '-16158',
				  'lei' => '-16169',
				  'le' => '-16171',
				  'lao' => '-16180',
				  'lang' => '-16187',
				  'lan' => '-16202',
				  'lai' => '-16205',
				  'la' => '-16212',
				  'kuo' => '-16216',
				  'kun' => '-16220',
				  'kui' => '-16393',
				  'kuang' => '-16401',
				  'kuan' => '-16403',
				  'kuai' => '-16407',
				  'kua' => '-16412',
				  'ku' => '-16419',
				  'kou' => '-16423',
				  'kong' => '-16427',
				  'keng' => '-16429',
				  'ken' => '-16433',
				  'ke' => '-16448',
				  'kao' => '-16452',
				  'kang' => '-16459',
				  'kan' => '-16465',
				  'kai' => '-16470',
				  'ka' => '-16474',
				  'jun' => '-16647',
				  'jue' => '-16657',
				  'juan' => '-16664',
				  'ju' => '-16689',
				  'jiu' => '-16706',
				  'jiong' => '-16708',
				  'jing' => '-16733',
				  'jin' => '-16915',
				  'jie' => '-16942',
				  'jiao' => '-16970',
				  'jiang' => '-16983',
				  'jian' => '-17185',
				  'jia' => '-17202',
				  'ji' => '-17417',
				  'huo' => '-17427',
				  'hun' => '-17433',
				  'hui' => '-17454',
				  'huang' => '-17468',
				  'huan' => '-17482',
				  'huai' => '-17487',
				  'hua' => '-17496',
				  'hu' => '-17676',
				  'hou' => '-17683',
				  'hong' => '-17692',
				  'heng' => '-17697',
				  'hen' => '-17701',
				  'hei' => '-17703',
				  'he' => '-17721',
				  'hao' => '-17730',
				  'hang' => '-17733',
				  'han' => '-17752',
				  'hai' => '-17759',
				  'ha' => '-17922',
				  'guo' => '-17928',
				  'gun' => '-17931',
				  'gui' => '-17947',
				  'guang' => '-17950',
				  'guan' => '-17961',
				  'guai' => '-17964',
				  'gua' => '-17970',
				  'gu' => '-17988',
				  'gou' => '-17997',
				  'gong' => '-18012',
				  'geng' => '-18181',
				  'gen' => '-18183',
				  'gei' => '-18184',
				  'ge' => '-18201',
				  'gao' => '-18211',
				  'gang' => '-18220',
				  'gan' => '-18231',
				  'gai' => '-18237',
				  'ga' => '-18239',
				  'fu' => '-18446',
				  'fou' => '-18447',
				  'fo' => '-18448',
				  'feng' => '-18463',
				  'fen' => '-18478',
				  'fei' => '-18490',
				  'fang' => '-18501',
				  'fan' => '-18518',
				  'fa' => '-18526',
				  'er' => '-18696',
				  'en' => '-18697',
				  'e' => '-18710',
				  'duo' => '-18722',
				  'dun' => '-18731',
				  'dui' => '-18735',
				  'duan' => '-18741',
				  'du' => '-18756',
				  'dou' => '-18763',
				  'dong' => '-18773',
				  'diu' => '-18774',
				  'ding' => '-18783',
				  'die' => '-18952',
				  'diao' => '-18961',
				  'dian' => '-18977',
				  'di' => '-18996',
				  'deng' => '-19003',
				  'de' => '-19006',
				  'dao' => '-19018',
				  'dang' => '-19023',
				  'dan' => '-19038',
				  'dai' => '-19212',
				  'da' => '-19218',
				  'cuo' => '-19224',
				  'cun' => '-19227',
				  'cui' => '-19235',
				  'cuan' => '-19238',
				  'cu' => '-19242',
				  'cou' => '-19243',
				  'cong' => '-19249',
				  'ci' => '-19261',
				  'chuo' => '-19263',
				  'chun' => '-19270',
				  'chui' => '-19275',
				  'chuang' => '-19281',
				  'chuan' => '-19288',
				  'chuai' => '-19289',
				  'chu' => '-19467',
				  'chou' => '-19479',
				  'chong' => '-19484',
				  'chi' => '-19500',
				  'cheng' => '-19515',
				  'chen' => '-19525',
				  'che' => '-19531',
				  'chao' => '-19540',
				  'chang' => '-19715',
				  'chan' => '-19725',
				  'chai' => '-19728',
				  'cha' => '-19739',
				  'ceng' => '-19741',
				  'ce' => '-19746',
				  'cao' => '-19751',
				  'cang' => '-19756',
				  'can' => '-19763',
				  'cai' => '-19774',
				  'ca' => '-19775',
				  'bu' => '-19784',
				  'bo' => '-19805',
				  'bing' => '-19976',
				  'bin' => '-19982',
				  'bie' => '-19986',
				  'biao' => '-19990',
				  'bian' => '-20002',
				  'bi' => '-20026',
				  'beng' => '-20032',
				  'ben' => '-20036',
				  'bei' => '-20051',
				  'bao' => '-20230',
				  'bang' => '-20242',
				  'ban' => '-20257',
				  'bai' => '-20265',
				  'ba' => '-20283',
				  'ao' => '-20292',
				  'ang' => '-20295',
				  'an' => '-20304',
				  'ai' => '-20317',
				  'a' => '-20319',
				);  //文字

	public static function Pinyin($string, $code='UTF-8') 
	{ 
			if($code != 'gb2312')
			{
				$string = mb_convert_encoding($string, 'GBK', 'UTF-8');
			}

			$res_str = ''; 

			for($i=0; $i<strlen($string); $i++) 
			{ 
					$ord_str = ord(substr($string, $i, 1)); 

					if($ord_str > 160)
					{
						$_Q = ord(substr($string, ++$i, 1)); $ord_str = $ord_str*256 + $_Q - 65536; 
					}

					$res_str .= self::transform($ord_str); 
			}

			//return preg_replace("/[^a-z0-9]*/", '', $res_str); 
			//return preg_replace("/[^a-zA-Z0-9]*/", '', $res_str); 
			return $res_str;
	} 

	public static function transform($num) 
	{ 
			if ($num>0 && $num<160)
			{
				return chr($num);
			}
			elseif($num<-20319 || $num>-10247)
			{
				return '';
			}
			else
			{ 
				foreach(self::$dictionary as $k=>$v)
				{
					if($v <= $num)
					{
						break;
					}
				} 

				return $k; 
			} 
	} 

	public static function _U2_Utf8_Gb($_C) 
	{
		/*
		$string = ''; 
		if($_C < 0x80) $string .= $_C; 
		elseif($_C < 0x800) 
		{ 
				$string .= chr(0xC0 | $_C>>6); 


				$string .= chr(0x80 | $_C & 0x3F); 
		}elseif($_C < 0x10000){ 
				$string .= chr(0xE0 | $_C>>12); 
				$string .= chr(0x80 | $_C>>6 & 0x3F); 
				$string .= chr(0x80 | $_C & 0x3F); 
		} elseif($_C < 0x200000) { 
				$string .= chr(0xF0 | $_C>>18);  
				$string .= chr(0x80 | $_C>>12 & 0x3F); 
				$string .= chr(0x80 | $_C>>6 & 0x3F); 
				$string .= chr(0x80 | $_C & 0x3F); 
		} 
		*/
		return mb_convert_encoding($string, "GBK", "UTF-8");

		//return iconv('UTF-8', 'GBK', $string); 
	}
}
?>